home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / DATABASE / OBJ2_2.ZIP;1 / DEMO3.PRG < prev    next >
Encoding:
Text File  |  1993-01-08  |  5.5 KB  |  130 lines

  1. //*****************************************************************************
  2. //                                 Demo3.prg
  3. // ⁄ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒø
  4. // ≥         Simple (trivial) demo application created with OBJECT.lib        ≥
  5. // ≥       Length of source code is (without notes) 90 lines, 3197 bytes      ≥
  6. // ¿ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒŸ
  7. //                        (c) 1991, JHK, JHK-Software, Piestany
  8. //
  9. //                Author:
  10. //                          Jan Hercek
  11. //                          JHK-Software
  12. //                          N.Teslu 26
  13. //                  92101   Piestany
  14. //                          Slovak republic
  15. //                          (in central Europe)
  16. //
  17. //                          (tel: +42/838/21782)
  18. //
  19. //                Compile with Clipper.exe, switches: /N/M/W/A
  20. //                Link command: RtLink FI Demo3 LIB Object
  21. //                          or: RtLink FI Demo3 PLL Object
  22. //*****************************************************************************
  23.  
  24. #include "Set.ch"
  25. #include "InKey.ch"
  26. #include "Object.ch"
  27.  
  28. static oD,oV,oU,oM  //objects: Database, View (employees), View (tasks), Menu
  29.  
  30. procedure Main(clr)
  31.   NetLimit(2)  //in the same time can work max two users
  32.   ObjectInit(clr,"Demo3",2,1992,"every Clipper programmer",,"evaluating version 0.03")
  33.   object oD of Dbf  init DInit()
  34.   object oV of View init VInit()
  35.   object oU of View init UInit()
  36.   object oM of Menu init MInit()
  37.   oM:Process()
  38.   ObjectDone()
  39.   return
  40.  
  41. procedure DInit()
  42.   oD:AddDbf("Employ")
  43.   oD:AddField("Name", "C",20)
  44.   oD:AddField("Birth","D");    oD:ChValid({||Alert("Changed field"),true})
  45.   oD:AddField("Pay",  "N",8,2);oD:Range(0,99000)
  46.   oD:AddField("Note", "M")
  47.   oD:AddField("EmpNo","N",3); oD:ChValid({|g,l,v|upDateRel(g:VarGet(),v)}) //employee number; keep relation field in database Tasks
  48.   oD:AddNtx("~1.Name","Emp_name","Name")           //menu_item, file_name, index_key
  49.   oD:AddNtx("~2.Emp. number","Emp_No","EmpNo")
  50.   *
  51.   oD:AddDbf("Tasks")
  52.   oD:AddField("EmpNo",   "N",3); oD:Valid({|Get|DbfValid(,Get,"Employ",2,{||Employ->EmpNo})}) //select from the Employ database
  53.   oD:AddField("Task",    "C",20)
  54.   oD:AddField("Descript","M")
  55.   oD:AddNtx("~1.Emp. number","TskEmpNo","EmpNo")
  56.   oD:AddRelation("EmpNo","Employ",2)  //key_expression, database, index_order
  57.   return
  58.  
  59. function updateRel(newEmpNo,oldEmpNo)                   //after change Employ->EmpNo we must to change
  60.   net replace EmpNo:=newEmpNo in Tasks,1 seek oldEmpNo  //all records Tasks->EmpNo (relation integrity!)
  61.   return true
  62.  
  63. procedure VInit()
  64.   oV:Select("Employ")
  65.   oV:AddField("First & last name","Name",  "field->Name")
  66.   oV:AddField("Annual pay",       "Pay",   "field->Pay")
  67.   oV:AddField("Birth date",       "Birth", "field->Birth")
  68.   oV:AddMemo( "Remarks",          "Rem.",  "field->Note")
  69.   oV:AddField("Emp. number",      "Emp.no","field->EmpNo")
  70.   *
  71.   oV:AddReport("~1.Employees")
  72.   oV:AddRTop("Short view of employees;(only names, pays and birth dates)")
  73.   oV:AddRField("First & last name","Name")
  74.   oV:AddRField("Annual pay","Pay",,true)
  75.   oV:AddRField("Birth date","Birth")
  76.   oV:AddRBottom("Created by Jan Hercek, Piestany")
  77.   *
  78.   oV:AddAction(K_ALT_U,{||Alert("User action in oV-object")},"ALT_U=Action")
  79.   oV:AddFilter("~1.Only records<5","RecNo()<5")
  80.   oV:DelBlock:={|o|DoDelete(o)} //after delete employee record in Employ database
  81.   return                        //we must deleted all records with this EmpNo in database Tasks
  82.                                 //(relation integrity!)
  83. function DoDelete(obj)
  84.   local p:=Employ->EmpNo
  85.   returnif Alert("Do you want to delete this Employee?",{"Yes","No"})<>1 with false
  86.   net delete continue return false            //delete his in database Employ
  87.   net delete in Uloha,1 seek p return false   //delete all his (her) tasks
  88.   obj:Tb:RefreshAll()                         //refresh view window
  89.   return true
  90.  
  91. procedure UInit()
  92.   oU:Select("Tasks")
  93.   oU:AddField("Emp. number",     "Emp.no","field->EmpNo")
  94.   oU:AddField("Firs & last name","Name",  "Employ->Name",,{||false})   //set when to false (locally for this view)
  95.   oU:AddField("Task name",       "Task",  "field->Task")
  96.   oU:AddMemo( "Task description","Descr.","field->Descript")
  97.   oU:AddAction(K_ALT_U,{||Alert("Action in Tasks")},"ALT_U=Action")
  98.   return
  99.  
  100. procedure MInit()
  101.   oM:AddBar("~File")
  102.     oM:AddView("~Employees","Employees", oV)
  103.     oM:AddView("~Tasks",, oU)                       //new object into the menu
  104.     oM:AddItem("Text ~file",   {||FInfoShow()})
  105.     oM:AddItem("E~xit  Alt-X", {||oM:Done()}, K_ALT_X)
  106.   oM:AddBar("~Archiv")
  107.     oM:AddItem("~Save on disk a:", {||oD:Save("a:")})
  108.     oM:AddItem("~Restore from disk a:", {||oD:Load("a:")})
  109.   oM:AddBar("~Problems?")
  110.     oM:AddItem("~Reindex", {||oD:ReIndex()})
  111.     oM:AddItem("~Pack", {||oD:Pack()})
  112.     oM:AddItem("~Change password", {|i|oM:Password(i)})
  113.     oM:AddCheck("~Wrap menu", {|i,v|Set(_SET_WRAP,v)})
  114.   return
  115.  
  116. //
  117. //All program is only linear describe of desired actions,
  118. //without any jumps, loops, ...
  119. //without any screen positionning commands,
  120. //with the minimal possibility to create any error.
  121. //
  122. //Remember: 
  123. //this is a NET version, a program created by with OBJECT.lib has NET capability
  124. //
  125. //Excuse me, please, for my terrible english. Many thanks.
  126. //(Have you any job for me?)
  127. //
  128. //˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ it is REALLY end of program ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙
  129.  
  130.